
package nb.photoviewer;

import javafx.application.Platform;
import javafx.collections.ObservableList;
import javafx.scene.control.TreeItem;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.input.Dragboard;
import javafx.scene.input.TransferMode;
import javafx.scene.layout.TilePane;
import javafx.scene.control.TreeCell;
import javafx.scene.control.TreeView;
import javafx.util.Callback;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;
import java.util.Arrays;
import javafx.scene.paint.Color;
import javafx.scene.shape.SVGPath;

public class TreeViewManager {

    public void createTree(File directory, TreeItem<File> parent) {
        TreeItem<File> dummyItem = new TreeItem<>(new File("Loading..."));
        parent.getChildren().add(dummyItem);
        parent.expandedProperty().addListener((obs, wasExpanded, isNowExpanded) -> {
            if (isNowExpanded && parent.getChildren().contains(dummyItem)) {
                expandDirectory(directory, parent);
            }
        });
    }

    private void expandDirectory(File directory, TreeItem<File> parent) {
        parent.getChildren().clear();
        if (directory.isDirectory()) {
            File[] folders = directory.listFiles(File::isDirectory);
            if (folders != null) {
                Arrays.stream(folders)
                        .filter(folder -> !(folder.getName().equals("$RECYCLE.BIN") || folder.getName().equals("$WinREAgent")|| folder.getName().equals("$Recycle.Bin"))) // 过滤掉名为 "$RECYCLE.BIN" 和 "$WinREAgent" 的目录
                        .forEach(folder -> addFolderToParent(folder, parent));
            }
        }
    }
    private void addFolderToParent(File folder, TreeItem<File> parent) {

        TreeItem<File> subItem = new TreeItem<>(folder); // 假设这是你的文件对象

        parent.getChildren().add(subItem);
        File[] subFolders = folder.listFiles(File::isDirectory);
        if (subFolders != null && subFolders.length > 0) {
            createTree(folder, subItem);
        }
    }

//    public void setCellFactory(TreeView<File> treeView) {
//        treeView.setCellFactory(new Callback<TreeView<File>, TreeCell<File>>() {
//            @Override
//            public TreeCell<File> call(TreeView<File> param) {
//                return new TreeCell<File>() {
//                    @Override
//                    protected void updateItem(File item, boolean empty) {
//                        super.updateItem(item, empty);
//                        if (empty) {
//                            setText(null);
//                            setGraphic(null);
//                        } else {
//                            if (item.getParent() == null) {
//                                setText(item.getPath()); // 对于盘符使用 getPath
//                            } else {
//                                setText(item.getName());
//
//
//
//                            }
//
//                            // 加载图标
//                            Image image = new Image("file:src/main/resources/nb/photoviewer/img/文件夹.png");
//                            ImageView imageView = new ImageView(image);
//                            imageView.setFitHeight(17);
//                            imageView.setFitWidth(17);
//
//
//
//                            // 设置图标
//                            setGraphic(imageView);
//
//                            // 设置TreeCell的样式
//                            setStyle("-fx-padding: 5px; -fx-font-size: 14px;" +
//                                    "-fx-background-color: #202020;"+
//                                    "-fx-text-fill:#ffffff,202,202;" +
//                                    "-fx-border-color: transparent;");
//
//
//
//                            // 移除可能存在的"root-Item"样式类
//                            this.getStyleClass().remove("root-Item");
//
//
//                            // 如果当前的TreeItem的名字是"我的电脑"，添加rootItem样式类
//                            if (item.getName().equals("我的电脑")) {
//                                this.getStyleClass().add("root-Item");
//                            }
//
//                            // 设置拖拽事件（悬浮未放下）
//                            setOnDragOver(event -> {
//                                if (event.getGestureSource() != this && event.getDragboard().hasString()) {
//                                    event.acceptTransferModes(TransferMode.COPY_OR_MOVE);
////                                   System.out.println("悬浮未放下"); // 添加的打印语句
//
//                                }
//                                event.consume();
//                            });
//
//
//                            //                            // 设置拖拽事件（松开鼠标）
//
//
////                            // 设置拖拽事件（松开鼠标）
////                            setOnDragDropped(event -> {
////                                System.out.println("松开鼠标."); // 添加的打印语句
////
////                                Dragboard db = event.getDragboard();
////
////                                System.out.println("接收到拖拽的文件数量：" + db.getFiles().size());
////
////
////                                boolean success = false;
////                                if (db.hasFiles()) {
////                                    // 在这里处理拖动的图片
////                                    File file = db.getFiles().get(0);
////                                    if (file != null && ImageUtility.imageExtensions.contains(ImageUtility.getFileExtension(file.getName()).toUpperCase())) {
////                                        // 这是一个有效的图片文件，您可以在这里处理它
////                                        try {
////                                            // 获取目标目录
////                                            File targetDirectory = this.getTreeItem().getValue();
////
////                                            // 创建目标文件对象
////                                            File targetFile = new File(targetDirectory, file.getName());
////                                            // 复制文件
////                                            Files.copy(file.toPath(), targetFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
////                                            success = true;
////
////                                            // 打印目标目录和被拖拽的文件的路径
////                                            System.out.println("Target directory: " + targetDirectory.getPath());
////                                            System.out.println("Dropped file: " + file.getPath());
////
////                                        } catch (IOException e) {
////                                            e.printStackTrace();
////                                            System.out.println("An error occurred while copying the file.");
////
////                                        }
////                                    }
////                                }
////                                event.setDropCompleted(success);
////                                event.consume();
////                            });
//
//
//                        }
//                    }
//                };
//            }
//        });
//    }
    private TreeView<File> treeView;

    public TreeViewManager(TreeView<File> treeView) {
        this.treeView = treeView;
    }


}